“Virtualization” generally refers to the use of a virtual (rather than actual) version of something, such as a hardware platform, operating system, a storage device or network resources. Platform virtualization relies on the creation of a “virtual machines” which behave like a real computer with an operating system. Software executed on these virtual machines are separated from the underlying hardware resources. For example, a computer that is running Mac OS X may host a virtual machine such as Parallels™ or VMWare Fusion™ that looks like a computer to the Windows operating system. Once installed in Mac OS X, Windows-based applications can be run on that virtual machine.
Most Windows-based applications must be installed before execution. The installation process copies application binaries and data files to some fixed locations in Windows, updates the registry keys and values for that application and establishes run-time dependencies on assemblies and system components. In addition, an application execution results in generation of new files and run time modification of existing files in Windows. Consequently, a virtual machine implementation for Windows requires a complex set of program code and consumes significant processing resources when translating between Windows-based modules and native software modules. Running such a virtualized environment on a hosting service for multiple online users, tracking file and registry updates and providing sufficient security in an efficient, cost-effective manner is a difficult task.